package co.edu.usbcali.unidad.presentation.backEndBeans;

import co.edu.usbcali.unidad.exceptions.*;
import co.edu.usbcali.unidad.modelo.*;
import co.edu.usbcali.unidad.modelo.dto.AutorizacionDTO;
import co.edu.usbcali.unidad.presentation.businessDelegate.BusinessDelegatorView;
import co.edu.usbcali.unidad.utilities.*;

import com.icesoft.faces.async.render.RenderManager;
import com.icesoft.faces.async.render.Renderable;
import com.icesoft.faces.component.ext.HtmlCommandButton;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.ext.HtmlSelectOneMenu;
import com.icesoft.faces.component.selectinputdate.SelectInputDate;
import com.icesoft.faces.context.DisposableBean;
import com.icesoft.faces.webapp.xmlhttp.FatalRenderingException;
import com.icesoft.faces.webapp.xmlhttp.PersistentFacesState;
import com.icesoft.faces.webapp.xmlhttp.RenderingException;
import com.icesoft.faces.webapp.xmlhttp.TransientRenderingException;

import java.math.BigDecimal;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.TimeZone;
import java.util.Vector;

import javax.faces.event.ValueChangeEvent;
import javax.faces.model.DataModel;
import javax.faces.model.SelectItem;

public class AutorizacionView extends DataSource implements Renderable,
		DisposableBean {
	private HtmlInputText txtAutCedVisitante;
	private HtmlInputText txtAutDescripcionActi;
	private HtmlInputText txtAutDescripcionPermi;
	private HtmlInputText txtAutEmpresa;
	private HtmlInputText txtAutNombreVisitante;
	private HtmlSelectOneMenu txtEstCodigo_Estado;
	private HtmlSelectOneMenu txtPriCodigo_PropietarioInmueble;
	private HtmlInputText txtAutCodigo;
	private SelectInputDate txtAutFecha;
	private HtmlCommandButton btnSave;
	private HtmlCommandButton btnModify;
	private HtmlCommandButton btnDelete;
	private HtmlCommandButton btnClear;
	private boolean renderDataTable;
	private boolean flag = true;
	private RenderManager renderManager;
	private PersistentFacesState state = PersistentFacesState.getInstance();
	private List<Autorizacion> autorizacion;
	private List<AutorizacionDTO> autorizacionDTO;
	private List<SelectItem> listEstado = new ArrayList<SelectItem>();
	private List<SelectItem> listPropietario = new ArrayList<SelectItem>();

	
	
	public AutorizacionView() {
		super("");
	}

	public String action_clear() {
		txtAutCedVisitante.setValue(null);
		txtAutCedVisitante.setDisabled(true);
		txtAutDescripcionActi.setValue(null);
		txtAutDescripcionActi.setDisabled(true);
		txtAutDescripcionPermi.setValue(null);
		txtAutDescripcionPermi.setDisabled(true);
		txtAutEmpresa.setValue(null);
		txtAutEmpresa.setDisabled(true);
		txtAutNombreVisitante.setValue(null);
		txtAutNombreVisitante.setDisabled(true);
		txtEstCodigo_Estado.setValue(null);
		txtEstCodigo_Estado.setDisabled(true);
		txtPriCodigo_PropietarioInmueble.setValue(null);
		txtPriCodigo_PropietarioInmueble.setDisabled(true);
		txtAutFecha.setValue(null);
		txtAutFecha.setDisabled(true);
		txtAutCodigo.setValue(null);
		txtAutCodigo.setDisabled(false);
		btnSave.setDisabled(true);
		btnDelete.setDisabled(true);
		btnModify.setDisabled(true);
		btnClear.setDisabled(false);

		return "";
	}

	public void listener_txtId(ValueChangeEvent event) {
		if ((event.getNewValue() != null) && !event.getNewValue().equals("")) {
			Autorizacion entity = null;

			try {
				String autCodigo = new String(txtAutCodigo.getValue()
						.toString());
				entity = BusinessDelegatorView.getAutorizacion(autCodigo);
			} catch (Exception e) {
				// TODO: handle exception
			}

			if (entity == null) {
				txtAutCedVisitante.setDisabled(false);
				txtAutDescripcionActi.setDisabled(false);
				txtAutDescripcionPermi.setDisabled(false);
				txtAutEmpresa.setDisabled(false);
				txtAutNombreVisitante.setDisabled(false);
				txtEstCodigo_Estado.setDisabled(false);
				txtPriCodigo_PropietarioInmueble.setDisabled(false);
				txtAutFecha.setDisabled(false);
				txtAutCodigo.setDisabled(false);
				btnSave.setDisabled(false);
				btnDelete.setDisabled(true);
				btnModify.setDisabled(true);
				btnClear.setDisabled(false);
			} else {
				txtAutCedVisitante.setValue(entity.getAutCedVisitante());
				txtAutCedVisitante.setDisabled(false);
				txtAutDescripcionActi.setValue(entity.getAutDescripcionActi());
				txtAutDescripcionActi.setDisabled(false);
				txtAutDescripcionPermi
						.setValue(entity.getAutDescripcionPermi());
				txtAutDescripcionPermi.setDisabled(false);
				txtAutEmpresa.setValue(entity.getAutEmpresa());
				txtAutEmpresa.setDisabled(false);
				txtAutFecha.setValue(entity.getAutFecha());
				txtAutFecha.setDisabled(false);
				txtAutNombreVisitante.setValue(entity.getAutNombreVisitante());
				txtAutNombreVisitante.setDisabled(false);
				txtEstCodigo_Estado.setValue(entity.getEstado().getEstCodigo());
				txtEstCodigo_Estado.setDisabled(false);
				txtPriCodigo_PropietarioInmueble.setValue(entity
						.getPropietarioInmueble().getPriCodigo());
				txtPriCodigo_PropietarioInmueble.setDisabled(false);
				txtAutCodigo.setValue(entity.getAutCodigo());
				txtAutCodigo.setDisabled(true);
				btnSave.setDisabled(true);
				btnDelete.setDisabled(false);
				btnModify.setDisabled(false);
				btnClear.setDisabled(false);
			}
		}
	}

	public String action_save() {
		try {
			String cedVisitante = txtAutCedVisitante.getValue().toString();
			String autCodigo = txtAutCodigo.getValue().toString();
			String descripcion = txtAutDescripcionActi.getValue().toString();
			String permiso = txtAutDescripcionPermi.getValue().toString();
			String autEmpresa = txtAutEmpresa.getValue().toString();
			Date fecha = txtAutFecha.getNavDate();
			String nombre = txtAutNombreVisitante.getValue().toString();
			String estado = txtEstCodigo_Estado.getValue().toString();
			String propietario = txtPriCodigo_PropietarioInmueble.getValue()
					.toString();

			if (!Utilities.soloNumeros(cedVisitante)) {
				throw new Exception("La cedula debe contener solo numeros");
			}
			if (cedVisitante.trim().equals("")) {
				throw new Exception("La cedula del visitante es obligatoria para registrar una autoizacion ");
			}

			if (!Utilities.soloNumerosyLetras(autCodigo)) {
				throw new Exception("El codigo no debe contener caracteres especiales");
			}
			if (autCodigo.trim().equals("")) {
				throw new Exception("El codigo es obligatorio para registrar una autoizacion ");
			}
			if (descripcion.trim().equals("")) {
				throw new Exception("Debe registrar una descripcion para registrar una autoizacion ");
			}
			if (fecha.equals("")) {
				throw new Exception("La fecha es obligatorio para registrar una autoizacion ");
			}

			if (!Utilities.soloLetras(nombre)) {
				throw new Exception("El nombre debe contener letras");
			}
			if (nombre.trim().equals("")) {
				throw new Exception("El nombre es obligatorio para registrar una autoizacion ");
			}

			if (estado.trim().equals("")) {
				throw new Exception( "Debe elegir un estado ");
			}

			if (propietario.trim().equals("")) {
				throw new Exception("Es necesario conocer esta informacion ");
			}

			//if (autEmpresa.trim().equals("")) {
				//throw new Exception("Es necesario conocer la informacion de la empresa ");
			//}

			//if (permiso.trim().equals("")) {
				//throw new Exception("Es necesario conocer esta informacion ");
			//}

			BusinessDelegatorView.saveAutorizacion(cedVisitante, autCodigo,
					descripcion, permiso, autEmpresa, fecha, nombre, estado,
					propietario);
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYSAVED);
			action_clear();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_delete() {
		try {
			BusinessDelegatorView.deleteAutorizacion(FacesUtils
					.checkString(txtAutCodigo));
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYDELETED);
			action_clear();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_modify() {
		try {
			String cedVisitante = txtAutCedVisitante.getValue().toString();
			String autCodigo = txtAutCodigo.getValue().toString();
			String descripcion = txtAutDescripcionActi.getValue().toString();
			String permiso = txtAutDescripcionPermi.getValue().toString();
			String autEmpresa = txtAutEmpresa.getValue().toString();
			Date fecha = txtAutFecha.getNavDate();
			String nombre = txtAutNombreVisitante.getValue().toString();
			String estado = txtEstCodigo_Estado.getValue().toString();
			String propietario = txtPriCodigo_PropietarioInmueble.getValue()
					.toString();

			if (!Utilities.soloNumeros(cedVisitante)) {
				throw new Exception("La cedula debe contener solo numeros");
			}
			if (cedVisitante.trim().equals("")) {
				throw new Exception("La cedula del visitante es obligatoria para registrar una autoizacion ");
			}

			if (!Utilities.soloNumerosyLetras(autCodigo)) {
				throw new Exception("El codigo no debe contener caracteres especiales");
			}
			if (autCodigo.trim().equals("")) {
				throw new Exception("El codigo es obligatorio para registrar una autoizacion ");
			}
			if (descripcion.trim().equals("")) {
				throw new Exception("Debe registrar una descripcion para registrar una autoizacion ");
			}
			if (fecha.equals("")) {
				throw new Exception("La fecha es obligatorio para registrar una autoizacion ");
			}

			if (!Utilities.soloLetras(nombre)) {
				throw new Exception("El nombre debe contener letras");
			}
			if (nombre.trim().equals("")) {
				throw new Exception("El nombre es obligatorio para registrar una autoizacion ");
			}

			if (estado.trim().equals("")) {
				throw new Exception( "Debe elegir un estado ");
			}

			if (propietario.trim().equals("")) {
				throw new Exception("Es necesario conocer esta informacion ");
			}

			BusinessDelegatorView.updateAutorizacion(cedVisitante, autCodigo,
					descripcion, permiso, autEmpresa, fecha, nombre, estado,
					propietario);
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
			action_clear();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_modifyWitDTO(String autCedVisitante, String autCodigo,
			String autDescripcionActi, String autDescripcionPermi,
			String autEmpresa, Date autFecha, String autNombreVisitante,
			String estCodigo_Estado, String priCodigo_PropietarioInmueble)
			throws Exception {
		try {
			BusinessDelegatorView.updateAutorizacion(autCedVisitante,
					autCodigo, autDescripcionActi, autDescripcionPermi,
					autEmpresa, autFecha, autNombreVisitante, estCodigo_Estado,
					priCodigo_PropietarioInmueble);
			renderManager.getOnDemandRenderer("AutorizacionView")
					.requestRender();
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
		} catch (Exception e) {
			// renderManager.getOnDemandRenderer("AutorizacionView").requestRender();
			FacesUtils.addErrorMessage(e.getMessage());
			throw e;
		}

		return "";
	}

	public List<Autorizacion> getAutorizacion() {
		if (flag) {
			try {
				autorizacion = BusinessDelegatorView.getAutorizacion();
				flag = false;
			} catch (Exception e) {
				flag = true;
				FacesUtils.addErrorMessage(e.getMessage());
			}
		}

		return autorizacion;
	}

	public boolean isFlag() {
		return flag;
	}

	public void setAutorizacion(List<Autorizacion> autorizacion) {
		this.autorizacion = autorizacion;
	}

	public boolean isRenderDataTable() {
		try {
			if (flag) {
				if (BusinessDelegatorView.findTotalNumberAutorizacion() > 0) {
					renderDataTable = true;
				} else {
					renderDataTable = false;
				}
			}

			flag = false;
		} catch (Exception e) {
			renderDataTable = false;
			e.printStackTrace();
		}

		return renderDataTable;
	}

	public DataModel getData() {
		state = PersistentFacesState.getInstance();

		if (onePageDataModel == null) {
			onePageDataModel = new LocalDataModel(pageSize);
		}

		return onePageDataModel;
	}

	/**
	 * This is where the Object data is retrieved from the database and returned
	 * as a list of objects for display in the UI.
	 */
	private DataPage<Autorizacion> getDataPage(int startRow, int pageSize) {
		// Retrieve the total number of objects from the database. This
		// number is required by the DataPage object so the paginator will know
		// the relative location of the page data.
		int totalNumberAutorizacion = 0;

		try {
			totalNumberAutorizacion = BusinessDelegatorView
					.findTotalNumberAutorizacion().intValue();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Calculate indices to be displayed in the ui.
		int endIndex = startRow + pageSize;

		if (endIndex > totalNumberAutorizacion) {
			endIndex = totalNumberAutorizacion;
		}

		try {
			autorizacion = BusinessDelegatorView.findPageAutorizacion(
					sortColumnName, sortAscending, startRow, endIndex
							- startRow);

			// Remove this Renderable from the existing render groups.
			// leaveRenderGroups();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Add this Renderable to the new render groups.
		// joinRenderGroups();
		// Reset the dirtyData flag.
		onePageDataModel.setDirtyData(false);
		// This is required when using Hibernate. If the SessionManager is not
		// cleared or closed objects are cached and stale objects will show up
		// in the table.
		// This way, the detached objects are reread from the database.
		// This call is not required with Hibernate, which uses a Query Hint
		// to clear the l2 cache in the DAO.
		flag = true;

		return new DataPage<Autorizacion>(totalNumberAutorizacion, startRow,
				autorizacion);
	}

	public DataModel getDataDTO() {
		state = PersistentFacesState.getInstance();

		if (onePageDataModel == null) {
			onePageDataModel = new LocalDataModelDTO(pageSize);
		}

		return onePageDataModel;
	}

	/**
	 * This is where the Object data is retrieved from the database and returned
	 * as a list of objects for display in the UI.
	 */
	private DataPage<AutorizacionDTO> getDataPageDTO(int startRow, int pageSize) {
		// Retrieve the total number of objects from the database. This
		// number is required by the DataPage object so the paginator will know
		// the relative location of the page data.
		int totalNumberAutorizacion = 0;

		try {
			totalNumberAutorizacion = BusinessDelegatorView
					.findTotalNumberAutorizacion().intValue();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Calculate indices to be displayed in the ui.
		int endIndex = startRow + pageSize;

		if (endIndex > totalNumberAutorizacion) {
			endIndex = totalNumberAutorizacion;
		}

		try {
			autorizacion = BusinessDelegatorView.findPageAutorizacion(
					sortColumnName, sortAscending, startRow, endIndex
							- startRow);

			if (Utilities.validationsList(autorizacion)) {
				autorizacionDTO = new ArrayList<AutorizacionDTO>();

				for (Autorizacion autorizacionTmp : autorizacion) {
					AutorizacionDTO autorizacionDTO2 = new AutorizacionDTO();
					autorizacionDTO2.setAutCodigo(autorizacionTmp
							.getAutCodigo().toString());
					autorizacionDTO2.setAutCedVisitante((autorizacionTmp
							.getAutCedVisitante() != null) ? autorizacionTmp
							.getAutCedVisitante().toString() : null);
					autorizacionDTO2.setAutDescripcionActi((autorizacionTmp
							.getAutDescripcionActi() != null) ? autorizacionTmp
							.getAutDescripcionActi().toString() : null);
					autorizacionDTO2
							.setAutDescripcionPermi((autorizacionTmp
									.getAutDescripcionPermi() != null) ? autorizacionTmp
									.getAutDescripcionPermi().toString()
									: null);
					autorizacionDTO2.setAutEmpresa((autorizacionTmp
							.getAutEmpresa() != null) ? autorizacionTmp
							.getAutEmpresa().toString() : null);
					autorizacionDTO2.setAutFecha(autorizacionTmp.getAutFecha());
					autorizacionDTO2.setAutNombreVisitante((autorizacionTmp
							.getAutNombreVisitante() != null) ? autorizacionTmp
							.getAutNombreVisitante().toString() : null);
					autorizacionDTO2
							.setEstCodigo_Estado((autorizacionTmp.getEstado()
									.getEstCodigo() != null) ? autorizacionTmp
									.getEstado().getEstCodigo().toString()
									: null);
					autorizacionDTO2
							.setPriCodigo_PropietarioInmueble((autorizacionTmp
									.getPropietarioInmueble().getPriCodigo() != null) ? autorizacionTmp
									.getPropietarioInmueble().getPriCodigo()
									.toString()
									: null);
					autorizacionDTO2.setAutorizacion(autorizacionTmp);
					autorizacionDTO2.setAutorizacionView(this);
					autorizacionDTO.add(autorizacionDTO2);
				}
			}

			// Remove this Renderable from the existing render groups.
			leaveRenderGroups();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Add this Renderable to the new render groups.
		joinRenderGroups();
		// Reset the dirtyData flag.
		onePageDataModel.setDirtyData(false);
		// This is required when using Hibernate. If the SessionManager is not
		// cleared or closed objects are cached and stale objects will show up
		// in the table.
		// This way, the detached objects are reread from the database.
		// This call is not required with Hibernate, which uses a Query Hint
		// to clear the l2 cache in the DAO.
		flag = true;

		return new DataPage<AutorizacionDTO>(totalNumberAutorizacion, startRow,
				autorizacionDTO);
	}

	protected boolean isDefaultAscending(String sortColumn) {
		return true;
	}

	/**
	 * This method is called when a render call is made from the server. Render
	 * calls are only made to views containing an updated record. The data is
	 * marked as dirty to trigger a fetch of the updated record from the
	 * database before rendering takes place.
	 */
	public PersistentFacesState getState() {
		onePageDataModel.setDirtyData();

		return state;
	}

	/**
	 * This method is called from faces-config.xml with each new session.
	 */
	public void setRenderManager(RenderManager renderManager) {
		this.renderManager = renderManager;
	}

	public void renderingException(RenderingException arg0) {
		if (arg0 instanceof TransientRenderingException) {
		} else if (arg0 instanceof FatalRenderingException) {
			// Remove from existing Customer render groups.
			leaveRenderGroups();
		}
	}

	/**
	 * Remove this Renderable from existing uiCustomerBeans render groups.
	 * OnDemandRenderers are named/created using the underlying Customer Number.
	 */
	private void leaveRenderGroups() {
		if (Utilities.validationsList(autorizacionDTO)) {
			for (AutorizacionDTO autorizacionTmp : autorizacionDTO) {
				renderManager.getOnDemandRenderer("AutorizacionView").remove(
						this);
			}
		}
	}

	/**
	 * Add this Renderable to the new uiCustomerBeans render groups.
	 * OnDemandRenderers are named/created using the underlying Customer Number.
	 */
	private void joinRenderGroups() {
		if (Utilities.validationsList(autorizacionDTO)) {
			for (AutorizacionDTO autorizacionTmp : autorizacionDTO) {
				renderManager.getOnDemandRenderer("AutorizacionView").add(this);
			}
		}
	}

	public void dispose() throws Exception {
	}

	public RenderManager getRenderManager() {
		return renderManager;
	}

	public void setState(PersistentFacesState state) {
		this.state = state;
	}

	public HtmlInputText getTxtAutCedVisitante() {
		return txtAutCedVisitante;
	}

	public void setTxtAutCedVisitante(HtmlInputText txtAutCedVisitante) {
		this.txtAutCedVisitante = txtAutCedVisitante;
	}

	public HtmlInputText getTxtAutDescripcionActi() {
		return txtAutDescripcionActi;
	}

	public void setTxtAutDescripcionActi(HtmlInputText txtAutDescripcionActi) {
		this.txtAutDescripcionActi = txtAutDescripcionActi;
	}

	public HtmlInputText getTxtAutDescripcionPermi() {
		return txtAutDescripcionPermi;
	}

	public void setTxtAutDescripcionPermi(HtmlInputText txtAutDescripcionPermi) {
		this.txtAutDescripcionPermi = txtAutDescripcionPermi;
	}

	public HtmlInputText getTxtAutEmpresa() {
		return txtAutEmpresa;
	}

	public void setTxtAutEmpresa(HtmlInputText txtAutEmpresa) {
		this.txtAutEmpresa = txtAutEmpresa;
	}

	public HtmlInputText getTxtAutNombreVisitante() {
		return txtAutNombreVisitante;
	}

	public void setTxtAutNombreVisitante(HtmlInputText txtAutNombreVisitante) {
		this.txtAutNombreVisitante = txtAutNombreVisitante;
	}

	public HtmlSelectOneMenu getTxtEstCodigo_Estado() {
		try {
			List<Estado> list = BusinessDelegatorView.findByCriteriaInEstado(null, null, null);
			listEstado.clear();
			listEstado.add(new SelectItem(0, "Seleccione el Estado"));

			for (Estado estado : list) {
				listEstado.add(new SelectItem(estado.getEstCodigo(), estado.getEstNombre()));
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		return txtEstCodigo_Estado;
	}

	public void setTxtEstCodigo_Estado(HtmlSelectOneMenu txtEstCodigo_Estado) {
		this.txtEstCodigo_Estado = txtEstCodigo_Estado;
	}

	public HtmlSelectOneMenu getTxtPriCodigo_PropietarioInmueble() {
		
		try {
			List<PropietarioInmueble> list = BusinessDelegatorView.findByCriteriaInPropietarioInmueble(null, null, null);
			listPropietario.clear();
			listPropietario.add(new SelectItem(0, "Seleccione el Estado"));

			for (PropietarioInmueble propietarioInmueble : list) {
				listPropietario.add(new SelectItem(propietarioInmueble.getPriCodigo(), FacesUtils.checkString(propietarioInmueble.getPersona())));
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		return txtPriCodigo_PropietarioInmueble;
	}

	public void setTxtPriCodigo_PropietarioInmueble(
			HtmlSelectOneMenu txtPriCodigo_PropietarioInmueble) {
		this.txtPriCodigo_PropietarioInmueble = txtPriCodigo_PropietarioInmueble;
	}

	public SelectInputDate getTxtAutFecha() {
		return txtAutFecha;
	}

	public void setTxtAutFecha(SelectInputDate txtAutFecha) {
		this.txtAutFecha = txtAutFecha;
	}

	public HtmlInputText getTxtAutCodigo() {
		return txtAutCodigo;
	}

	public void setTxtAutCodigo(HtmlInputText txtAutCodigo) {
		this.txtAutCodigo = txtAutCodigo;
	}

	public HtmlCommandButton getBtnSave() {
		return btnSave;
	}

	public void setBtnSave(HtmlCommandButton btnSave) {
		this.btnSave = btnSave;
	}

	public HtmlCommandButton getBtnModify() {
		return btnModify;
	}

	public void setBtnModify(HtmlCommandButton btnModify) {
		this.btnModify = btnModify;
	}

	public HtmlCommandButton getBtnDelete() {
		return btnDelete;
	}

	public void setBtnDelete(HtmlCommandButton btnDelete) {
		this.btnDelete = btnDelete;
	}

	public HtmlCommandButton getBtnClear() {
		return btnClear;
	}

	public void setBtnClear(HtmlCommandButton btnClear) {
		this.btnClear = btnClear;
	}

	public void setRenderDataTable(boolean renderDataTable) {
		this.renderDataTable = renderDataTable;
	}
	
	

	public List<SelectItem> getListEstado() {
		return listEstado;
	}

	public void setListEstado(List<SelectItem> listEstado) {
		this.listEstado = listEstado;
	}

	public List<SelectItem> getListPropietario() {
		return listPropietario;
	}

	public void setListPropietario(List<SelectItem> listPropietario) {
		this.listPropietario = listPropietario;
	}

	public void setFlag(boolean flag) {
		this.flag = flag;
	}

	public List<AutorizacionDTO> getAutorizacionDTO() {
		return autorizacionDTO;
	}

	public void setAutorizacionDTO(List<AutorizacionDTO> autorizacionDTO) {
		this.autorizacionDTO = autorizacionDTO;
	}

	public TimeZone getTimeZone() {
		return java.util.TimeZone.getDefault();
	}

	/**
	 * A special type of JSF DataModel to allow a datatable and datapaginator to
	 * page through a large set of data without having to hold the entire set of
	 * data in memory at once. Any time a managed bean wants to avoid holding an
	 * entire dataset, the managed bean declares this inner class which extends
	 * PagedListDataModel and implements the fetchData method. fetchData is
	 * called as needed when the table requires data that isn't available in the
	 * current data page held by this object. This requires the managed bean
	 * (and in general the business method that the managed bean uses) to
	 * provide the data wrapped in a DataPage object that provides info on the
	 * full size of the dataset.
	 */
	private class LocalDataModel extends PagedListDataModel {
		public LocalDataModel(int pageSize) {
			super(pageSize);
		}

		public DataPage<Autorizacion> fetchPage(int startRow, int pageSize) {
			// call enclosing managed bean method to fetch the data
			return getDataPage(startRow, pageSize);
		}
	}

	private class LocalDataModelDTO extends PagedListDataModel {
		public LocalDataModelDTO(int pageSize) {
			super(pageSize);
		}

		public DataPage<AutorizacionDTO> fetchPage(int startRow, int pageSize) {
			// call enclosing managed bean method to fetch the data
			return getDataPageDTO(startRow, pageSize);
		}
	}
}
